package diversion.v1.util;

/**
 *  Static help methods for encoding and decoding base64.
 *
 * @author    jmricker
 * @deprecated
 */
public class StringUtil {
    private static char[] hexChar = {
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
    };

    /**
     *  Description of the Method
     *
     * @param  bytes  Description of the Parameter
     * @return        Description of the Return Value
     */
    public static String toHexString(byte[] bytes) {
        StringBuffer buf = new StringBuffer(bytes.length * 2);

        for (int i = 0; i < bytes.length; i++) {
            buf.append(hexChar[(bytes[i] & 0xf0) >>> 4]);
            buf.append(hexChar[bytes[i] & 0x0f]);
        }

        return buf.toString();
    }

    /**
     *  Description of the Method
     *
     * @param  str  Description of the Parameter
     * @return      Description of the Return Value
     */
    public static String cleanHexString(String str) {
        StringBuffer buf = new StringBuffer();

        for (int i = 0; i < str.length(); i++) {
            if ((str.charAt(i) != (int) 32) && (str.charAt(i) != ':')) {
                buf.append(str.charAt(i));
            }
        }

        return buf.toString();
    }

    /**
     *  Description of the Method
     *
     * @param  str  Description of the Parameter
     * @return      Description of the Return Value
     */
    public static byte[] fromHexString(String str) {
        str = cleanHexString(str);

        int stringLength = str.length();

        if ((stringLength & 0x1) != 0) {
            throw new IllegalArgumentException("fromHexStringrequiresanevennumberofhexcharacters");
        }

        byte[] b = new byte[stringLength / 2];

        for (int i = 0, j = 0; i < stringLength; i += 2, j++) {
            int high = convertChar(str.charAt(i));
            int low  = convertChar(str.charAt(i + 1));

            b[j] = (byte) ((high << 4) | low);
        }

        return b;
    }

    /**
     *  Description of the Method
     *
     * @param  c  Description of the Parameter
     * @return    Description of the Return Value
     */
    private static int convertChar(char c) {
        if (('0' <= c) && (c <= '9')) {
            return c - '0';
        } else if (('a' <= c) && (c <= 'f')) {
            return c - 'a' + 0xa;
        } else if (('A' <= c) && (c <= 'F')) {
            return c - 'A' + 0xa;
        } else {
            throw new IllegalArgumentException("Invalidhexcharacter:" + c);
        }
    }
}

